"""
规划代理 - 负责分析用户需求并优化prompt
"""
import json
from typing import Dict, Any
from .base_agent import BaseAgent
import logging
import traceback

logger = logging.getLogger(__name__)

class PlannerAgent(BaseAgent):
    """规划代理 - 专注于需求分析和prompt优化"""
    
    def __init__(self):
        super().__init__()
        self.name = "planner"
        logger.info("PlannerAgent 初始化完成")
    
    def create_prompt_optimization_template(self, requirement: str) -> str:
        """创建prompt优化模板"""
        template = """
你是一个专业的需求分析和prompt优化专家。你的任务是分析用户的文章创作需求，并将其优化为更专业、更具体的prompt，同时生成基本的文章结构规划。

用户原始需求：{requirement}

请按照以下步骤进行分析和优化：

1. **需求分析**：
   - 识别文章类型（技术文档、产品说明、分析报告、教程等）
   - 确定目标受众（技术人员、普通用户、决策者等）
   - 提取核心主题和关键词
   - 识别具体要求（字数、风格、深度等）

2. **prompt优化**：
   - 保持用户的核心需求不变
   - 补充必要的上下文信息
   - 明确文章结构要求
   - 指定写作风格和语调
   - 添加质量标准

3. **基本结构规划**：
   - 制定文章的基本章节结构
   - 每个章节的核心内容要点

请以JSON格式输出结果：
```json
{{
    "optimized_prompt": "优化后的专业prompt",
    "plan": {{
        "title": "文章标题",
        "sections": [
            {{
                "title": "章节标题",
                "key_points": ["要点1", "要点2"]
            }}
        ]
    }}
}}
```

如果用户需求不明确或无法理解，请返回：
```json
{{
    "optimized_prompt": "用户需求不明确，需要更详细的描述",
    "plan": {{
        "title": "需求澄清",
        "sections": [
            {{
                "title": "需求澄清建议",
                "key_points": ["建议1", "建议2"]
            }}
        ]
    }}
}}
```
"""
        return template.format(requirement=requirement)
    
    def execute(self, state: Dict[str, Any]) -> Dict[str, Any]:
        """
        执行需求分析和prompt优化
        
        Args:
            state: 当前状态，包含 requirement 等信息
            
        Returns:
            Dict[str, Any]: 优化结果
        """
        try:
            logger.info("开始执行需求分析和prompt优化...")
            logger.info(f"收到的状态数据: {state}")
            
            requirement = state["requirement"]
            logger.info(f"用户原始需求: {requirement}")
            
            # 创建优化prompt的消息
            prompt_template = self.create_prompt_optimization_template(requirement)
            
            messages = [
                {
                    "role": "system", 
                    "content": "你是一个专业的需求分析和prompt优化专家，专注于将用户需求转换为更专业、更精确的prompt，并生成基本的文章结构规划。请始终以JSON格式回复。"
                },
                {
                    "role": "user", 
                    "content": prompt_template
                }
            ]
            
            logger.info("调用LLM进行需求分析和prompt优化...")
            result = self.call_llm(messages)
            logger.info(f"LLM返回结果: {result}")
            
            if result["success"]:
                content = result["content"].strip()
                logger.info(f"LLM返回的内容: {content}")
                
                try:
                    # 尝试解析JSON响应
                    if content.startswith('```json'):
                        content = content.replace('```json', '').replace('```', '').strip()
                    elif content.startswith('```'):
                        content = content.replace('```', '').strip()
                    
                    parsed_result = json.loads(content)
                    
                    optimized_prompt = parsed_result.get("optimized_prompt", content)
                    plan = parsed_result.get("plan", {
                        "title": "基于需求生成的文章",
                        "sections": [
                            {
                                "title": "引言",
                                "key_points": ["背景介绍", "目标说明"]
                            },
                            {
                                "title": "主要内容", 
                                "key_points": ["核心要点", "详细分析"]
                            },
                            {
                                "title": "总结",
                                "key_points": ["要点回顾", "结论"]
                            }
                        ]
                    })
                    
                except (json.JSONDecodeError, KeyError) as e:
                    logger.warning(f"JSON解析失败，使用原始内容: {e}")
                    optimized_prompt = content
                    plan = {
                        "title": "基于需求生成的文章",
                        "sections": [
                            {
                                "title": "引言",
                                "key_points": ["背景介绍", "目标说明"]
                            },
                            {
                                "title": "主要内容",
                                "key_points": ["核心要点", "详细分析"]
                            },
                            {
                                "title": "总结", 
                                "key_points": ["要点回顾", "结论"]
                            }
                        ]
                    }
                
                logger.info(f"优化后的prompt: {optimized_prompt}")
                logger.info(f"生成的计划: {plan}")
                
                # 返回兼容workflow的结构，同时包含新字段
                return {
                    "success": True,
                    "content": optimized_prompt,  # workflow期待的字段
                    "optimized_prompt": optimized_prompt,  # 新的字段名，用于前端显示
                    "plan": json.dumps(plan),  # 计划数据，以JSON字符串形式存储
                    "original_requirement": requirement,
                    "analysis_complete": True,
                    "status": "completed",
                    "message": "需求分析完成，已优化用户prompt并生成基本计划"
                }
            else:
                logger.error(f"LLM调用失败: {result.get('error')}")
                return {
                    "success": False,
                    "error": result["error"],
                    "status": "failed",
                    "message": "需求分析失败"
                }
                
        except Exception as e:
            error_msg = f"需求分析执行失败: {str(e)}"
            logger.error(error_msg)
            logger.error(f"错误详情: {traceback.format_exc()}")
            return {
                "success": False,
                "error": error_msg,
                "status": "failed",
                "message": "需求分析过程中发生错误"
            } 